/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package td1;

import java.awt.Color;
/**
 * Implementation du quadrilatere
 * comparable entre plusieurs instance de lui même
 * @author saluzzo
 */
public class Quadrilatere implements Comparable<Quadrilatere> {

    public int compareTo(Quadrilatere o) {
        int nombre1 = o.getZValue();
        int nombre2 = this.getZValue();
        if (nombre1 > nombre2) {
            return -1;
        } else if (nombre1 == nombre2) {
            return 0;
        } else {
            return 1;
        }

    }

    public Quadrilatere(Point SommetHG, Point SommetHD, Point SommetBG, Point SommetBD) {
        this.A = SommetHG;
        this.B = SommetHD;
        this.C = SommetBG;
        this.D = SommetBD;
        ZValue = 1;
    }

    public String type() {
        return "quadrilatere quelconque";
    }

    public String coordonnees() {
        return A.getCoordonnee() + ", "
                + B.getCoordonnee() + ", "
                + C.getCoordonnee() + " et "
                + D.getCoordonnee();
    }

    @Override
    public String toString() {
        String tempString = new String("Je suis un " + this.type()
                + ". Mes sommets ont pour coordonnées "
                + this.coordonnees() + ".\n"
                + this.propriete());
        return tempString;
    }

    public void affiche() {
        System.out.println(this.toString());
    }

    public String propriete() {
        return "Un " + this.type() + " est un polygone à 4 cotés.";
    }

    public void deplace(float x, float y) {
        this.A.setX(this.A.getX() + x);
        this.B.setX(this.B.getX() + x);
        this.C.setX(this.C.getX() + x);
        this.D.setX(this.D.getX() + x);

        this.A.setY(this.A.getY() + y);
        this.B.setY(this.B.getY() + y);
        this.C.setY(this.C.getY() + y);
        this.D.setY(this.D.getY() + y);
    }

    public void deplaceResetA(float x, float y) {
        float deltaX = x - this.getA().getX();
        float deltaY = y - this.getA().getY();

        this.getA().setX(x);
        this.getA().setY(y);

        this.getB().setX(this.getB().getX() + deltaX);
        this.getC().setX(this.getC().getX() + deltaX);
        this.getD().setX(this.getD().getX() + deltaX);

        this.getB().setY(this.getB().getY() + deltaY);
        this.getC().setY(this.getC().getY() + deltaY);
        this.getD().setY(this.getD().getY() + deltaY);
    }

    public float getMaxX() {
        float value;
        value = this.getA().getX();
        if (value < this.getB().getX()) {
            value = this.getB().getX();
        }
        if (value < this.getC().getX()) {
            value = this.getC().getX();
        }
        if (value < this.getD().getX()) {
            value = this.getD().getX();
        }
        return value;
    }

    public float getMaxY() {
        float value;
        value = this.getA().getY();
        if (value < this.getB().getY()) {
            value = this.getB().getY();
        }
        if (value < this.getC().getY()) {
            value = this.getC().getY();
        }
        if (value < this.getD().getY()) {
            value = this.getD().getY();
        }
        return value;
    }

    public float getMinX() {
        float value;
        value = this.getA().getX();
        if (value > this.getB().getX()) {
            value = this.getB().getX();
        }
        if (value > this.getC().getX()) {
            value = this.getC().getX();
        }
        if (value > this.getD().getX()) {
            value = this.getD().getX();
        }
        return value;
    }

    public float getMinY() {
        float value;
        value = this.getA().getY();
        if (value > this.getB().getY()) {
            value = this.getB().getY();
        }
        if (value > this.getC().getY()) {
            value = this.getC().getY();
        }
        if (value > this.getD().getY()) {
            value = this.getD().getY();
        }
        return value;
    }
    protected Point A;
    protected Point B;
    protected Point C;
    protected Point D;
    protected int ZValue;
    protected Color Couleur;

    public Point getA() {
        return A;
    }

    public Point getB() {
        return B;
    }

    public Point getC() {
        return C;
    }

    public Point getD() {
        return D;
    }

    public static void main(String[] args) {
        //Test unitaire
        Quadrilatere quad = new Quadrilatere(new Point(0, 0), new Point(100, 0), new Point(0, 40), new Point(100, 50));
        quad.affiche();
    }

    public int getZValue() {
        return ZValue;
    }

    public void setZValue(int ZValue) {
        this.ZValue = ZValue;
    }

    public Color getCouleur() {
        return Couleur;
    }

    public void setCouleur(Color Couleur) {
        this.Couleur = Couleur;
    }
}
